//创建大根堆，把堆大小维持在k个，堆顶就是第k小，来的元素超过k个出堆顶
#include<iostream>
#include<queue>
using namespace std;
const int N=1e6+10;
int arr[N];

int main()
{
	priority_queue<int> heap;
	int  n,m,k;cin>>n>>m>>k;
	for(int i=0;i<n;i++)
	{
		cin>>arr[i];
		heap.push(arr[i]);
		if(heap.size()>k) heap.pop();
	}
	while(m--)
	{
		int op;cin>>op;
		if(op==1)
		{
			int x;cin>>x;
			heap.push(x);
			if(heap.size()>k) heap.pop();
		}
		else if(op==2)
        {
            if(heap.size()==k) cout<<heap.top()<<endl;
            else cout<<"-1"<<endl;
        }
	}
	return 0;
}